<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      // 实例方法： 通过构造函数创建的对象，它调用的方法。
      // MDN上 Array.prototype.reduce()  ==> reduce 实例方法

      const arr = [1, 2, 3];
      // 语法： arr.reduce(callbackFn, initialValue)
      // 作用： 对数组里的每个元素都执行一个自定义的reducer函数，将其结果汇总为单个返回值。
      //   参数：
      // callbackFn               :  回调函数   必须     √
      // initialValue             :  初始值     （可选）  √

      // callbackFn的参数：
      //       previousValue      :  上一次调用callbackFn的返回值    √
      //       currentValue       :  当前元素                      √
      //       currentIndex       :  当前元素的索引  （可选）
      //       array              :  源数组  （可选）

      // 返回值： 使用reducer回调函数遍历整个数组后的结果

      // 注意： 如果有初始值，那么prev第一次执行的时候，就是写的初始值
      //       如果没有初始值，initValue就是数组的第一个元素 arr[0], cur就依次取第二个元素        // 语法： arr.reduce(callbackFn, initialValue)
      // 作用： 对数组里的每个元素都执行一个自定义的reducer函数，将其结果汇总为单个返回值。
      //   参数：
      // callbackFn               :  回调函数   必须     √
      // initialValue             :  初始值     （可选）  √

      // callbackFn的参数：
      //       previousValue      :  上一次调用callbackFn的返回值    √
      //       currentValue       :  当前元素                      √
      //       currentIndex       :  当前元素的索引  （可选）
      //       array              :  源数组  （可选）

      // 返回值： 使用reducer回调函数遍历整个数组后的结果

      // 注意： 如果有初始值，那么prev第一次执行的时候，就是写的初始值
      //       如果没有初始值，initValue就是数组的第一个元素 arr[0], cur就依次取第二个元素
      const arr2 = [1, 2, 3];

      const res = arr.reduce(function (pre, cur) {
        // console.log(1);
        return pre + cur;
      }, 0);
      console.log(res);
      // 作用: 常用于数组的求和
      const res2 = arr.reduce((pre, cur) => pre + cur, 8);
      console.log(res2);
    </script>
  </body>
</html>
